#ifndef H_TRAITEMENTS
#define H_TRAITEMENTS

// Fonction qui va afficher une erreur, avant de quitter le programme
void usage(char *name, int code, char *cible);

// Fonction qui va vérifier qu'il n'existe pas de cycle dans la règle passée en parramêtre
// Prends également en argument le nom du programme, pour l'appel à la fonction usage
int verrificationCycle(makefile_t *makefile, mk_rule_t *regle, char *progName);

// Fonction qui va réappliquer les descripteurs en parramêtres au trois sorties standardes du programme
void reapplicationDescripteurs(int in, int out, int err);

pid_t pid_child;
// Fonction en charge de la redirection des signaux
void redirectionSignaux(int sigint);

// Fonction qui va remplacer la variable contenue dans cmd par sa valeur
char *remplacement(char *cmd, mk_var_t **vars);

// Recherche la regle dans le makefile
mk_rule_t *trouveRegle(makefile_t *makefile, char *regle);

// Traite de facon récursive la regle passée en argument du makefile
// Retourne 0 si ok, -1 si erreur
int traitementRegle(makefile_t *makefile, mk_rule_t *rule);

// Execute la commande passée en argument
// Retourne le résultat, -1 si erreur
int traitementCommande(command_t *commande, makefile_t *makefile);

// Execute la pcommand passée en arguments, soit toutes les sous commandes
// Retourne le résultat des commandes, -1 si erreur
int traitementPCommande(pcommand_t *commande, makefile_t *makefile);

// Execute la commande passée en argument
// Retourne le résultat de la commande
int exectuteCommande(char **argv, makefile_t *makefile, int tube[2]);

// Remplace toutes les variables dans la chaine cmd (commencent par $) par leurs valeurs dans le makefile
char *remplacement(char *cmd, mk_var_t **vars);

// Découpe tous les éléments du tableau elems par le carractère sep en créant un nouveau tableau
// tailleTableau contient la taille de elems en entrée et devient la taille du tableau retourné
char **decoupe(char **elems, const char sep, int *tailleTableau);

#endif
